package ioc;

import ioc.bean.HelloWorld;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

public class MyBeanFactoryApp {
    public static void main(String[] args) {
        beanfactory();
        /**
         * FileSystemXmlApplicationContext：该容器从 XML 文件中加载已被定义的 bean。在这里，你需要提供给构造器 XML 文件的完整路径。
         * ClassPathXmlApplicationContext：该容器从 XML 文件中加载已被定义的 bean。在这里，你不需要提供 XML 文件的完整路径，只需正确配置 CLASSPATH 环境变量即可，因为，容器会从 CLASSPATH 中搜索 bean 配置文件。
         * WebXmlApplicationContext：该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。
         */
        classPathXmlApplicationContext();
        fileSystemXmlApplicationContext();

    }

    private static void fileSystemXmlApplicationContext() {
        final FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("D:\\git\\spring\\src\\ioc\\applicationContext.xml");
        final HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld2BeanFactory");
        helloWorld.getMessage();
    }

    private static void classPathXmlApplicationContext() {
        final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ioc/applicationContext.xml");
        final HelloWorld myHelloWorld = (HelloWorld) context.getBean("myHelloWorld");
        myHelloWorld.setMessage("Hello World!");
        myHelloWorld.getMessage();
    }

    private static void beanfactory() {
        final XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("ioc/applicationContext.xml"));
        final HelloWorld helloWorld = (HelloWorld) xmlBeanFactory.getBean("helloWorld2BeanFactory");
        helloWorld.getMessage();
    }

}

